home *** CD-ROM | disk | FTP | other *** search
/ FM Towns: Free Software Collection 4 / FM Towns Free Software Collection 4 - Disc 1.iso / pao / towns / paolib / sample / fdchk.c < prev    next >
Text File  |  1991-10-18  |  3KB  |  110 lines

  1. /******************************************************************************
  2. **
  3. **    ドライブ 0 , 1 <フロッピィ> の状態をチェックするプログラム
  4. **
  5. **    < History >
  6. **    1989.11.18 : CREATE
  7. **
  8. **    < note > : TABS = 4
  9. **
  10. **    Programmed by Y.Hirata ( Nifty ID : NAB03321 )
  11. **
  12. ******************************************************************************/
  13.  
  14. pragma    Off (Floating_point) ;
  15.  
  16. #include <dos.h>
  17. #include <stdio.h>
  18. #include "hc.h"
  19.  
  20. #define        DEBUG    0
  21.  
  22. union    REGS    regs ;
  23.  
  24. /********************  ドライブステータス情報の取り出し  *********************/
  25. char dstatus( char dno )
  26. {
  27. /*
  28. **    デバイス番号
  29. **    _7_6_5_4_3_2_1_0_
  30. **    | | | | | | | | |
  31. **    ~~~~~~~~~~~~~~~~~
  32. **            |-------| : ドライブ番号 ( 0 ~ 15 )
  33. **    |-------| : デバイス
  34. **                FPD = 0010 <02H>
  35. */
  36.     if ( dno < 0 || dno > 15 ) {
  37.         printf( "Drive No.(%d) ERROR\n",dno ) ;
  38.         return( FALSE ) ;
  39.     }
  40.  
  41.     regs.h.ah = 0x02 ;
  42.     regs.h.al = DEV_FD | dno ;
  43.     regs.h.ch = 0 ;
  44.  
  45.     int86( 0x93,®s,®s ) ;
  46.  
  47. #if    DEBUG
  48.     printf( "\n<dstatus> drive no. = %d\n",dno ) ;
  49.     printf( "\n== int 93h function 02h ==\n" ) ;
  50.     printf( "returns...\n" ) ;
  51.     printf( "AH (return code)               : AH=%#x\n",regs.h.ah ) ;
  52.     printf( "AL (drive mode <HD>)           : AL=%#x\n",regs.h.al ) ;
  53.     printf( "DL (drive status <FD>)         : DL=%#x\n",regs.h.dl ) ;
  54.     printf( "BX (max Block No. -High- <HD>) : BX=%#x\n",regs.x.bx ) ;
  55.     printf( "DX (max Block No. -Low - <HD>) : DX=%#x\n",regs.x.dx ) ;
  56.     printf( "CX (error information)         : CX=%#x\n\n",regs.x.cx ) ;
  57. #endif
  58.  
  59.     if ( regs.h.ah )                    /*  エラー        */
  60.         return( regs.x.cx ) ;
  61.     else                                /*  正常終了    */
  62.         return( regs.h.dl ) ;
  63. }
  64.  
  65. /****************************  ★ メイン ★  *********************************/
  66. void main()
  67. {
  68.     char    c, st ;
  69.  
  70.     for ( c=0; c<3; c++ ) {
  71.         printf( "\nDRIVE %d STATUS..............\n",c ) ;
  72.         st = dstatus( c ) ;
  73.         if ( c == 1 && DRV_single() ) {
  74.             printf( "シングルドライブモードになっています.\n" ) ;
  75.         } else if ( (st & 0x01) == 0x01 ) {
  76.             printf( "フロッピィがセットされていません!\n" ) ;
  77.         } else {
  78.             printf( "フロッピィは、" ) ;
  79.             if ( (st & 0x02) == 0x02 ) {
  80.                 printf( "書き込み不可\n" ) ;
  81.             } else {
  82.                 printf( "書き込み可\n" ) ;
  83.             }
  84.             /*-------------------------*/
  85.             printf( "              " ) ;
  86.             if ( (st & 0x04) == 0x04 ) {
  87.                 printf( "両面\n" ) ;
  88.             } else {
  89.                 printf( "片面\n" ) ;
  90.             }
  91.             /*-------------------------*/
  92.             printf( "              " ) ;
  93.             if ( (st & 0x10) == 0x10 ) {
  94.                 printf( "2D/2DD\n" ) ;
  95.             } else {
  96.                 printf( "2HD\n" ) ;
  97.             }
  98.             /*-------------------------*/
  99.             printf( "              " ) ;
  100.             if ( (st & 0x80) == 0x80 ) {
  101.                 printf( "単密度\n" ) ;
  102.             } else {
  103.                 printf( "倍密度\n" ) ;
  104.             }
  105.             printf( "となっています。\n" ) ;
  106.         }
  107.     }
  108. }
  109.  
  110.